package com.soup.common.config;

import com.google.common.collect.Lists;
import com.soup.common.constant.CommonConstant;
import lombok.Data;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * 文件配置
 *
 * @author zhaoyi
 */
@Data
public class FileProperties {

    public static final String FILE_CONFIG_PREFIX = "file";

    /**
     * 文件上传路径
     */
    private String uploadPath;

    /**
     * 模板文件的下载目录
     */
    private String templatePath;

    /**
     * 最大上传大小，单位bytes，默认不限制
     */
    private long maxUploadSize = -1;

    /**
     * 每个文件最大上传大小，单位bytes，默认不限制
     */
    private long maxUploadSizePerFile = -1;

    /**
     * 合法的上传文件后缀名
     */
    private List<String> legalExtensions = Lists.newArrayList("jpg", "jpeg", "png", "dwg", "dwt", "pdf", "doc", "docx", "xls", "xlsx");

    /**
     * 文件下载模板配置项，key值为模板文件的key，value为模板文件名
     * yml配置示例：
     * template-file-map: # 键值对配置
     *   key1: val1
     *   key2: val2
     */
    private Map<String, String> templateFileMap;

    /**
     * 文件下载模板配置项
     */
    private List<Map<String, String>> templateFiles;

    /**
     * 校验文件后缀名是否合法
     *
     * @param fileName 包含文件后缀名的文件名称
     * @return true 合法文件 | false 不合法文件
     */
    public boolean isLegalFile(String fileName) {

        AtomicBoolean checkReuslt = new AtomicBoolean(false);
        Optional.ofNullable(fileName).ifPresent(name -> {
            String contentType = name.substring(name.lastIndexOf(CommonConstant.DOT) + CommonConstant.NUM_1);
            checkReuslt.set(legalExtensions.contains(contentType.toLowerCase()));
        });

        return checkReuslt.get();
    }
}
